跳到主要内容

TCP 通信设置

本指南演示如何使用 Node-RED 配置 OV20i 摄像头与外部设备之间的 TCP 通信。TCP 通信适用于实时数据交换、远程控制或与自定义应用及系统的集成。

何时使用 TCP 通信: 实时数据流传输、自定义应用集成、与外部系统的双向通信、高频数据交换,或当 HTTP/REST API 不适用时。

先决条件

  • 已设置并连接的 OV20i 摄像头系统
  • 具备 TCP 通信能力的目标设备/系统
  • 摄像头与目标设备之间的网络连接
  • 基本的 IP 地址和端口号知识
  • 已激活的配方(成像和检测设置完成)

步骤 1:验证网络配置

1.1 检查摄像头 IP 地址

  1. 进入系统设置
  2. 记录摄像头 IP 地址(例如:192.168.0.100)
  3. 核实子网掩码及网络配置

1.2 确认目标设备网络

确保网络兼容性:

  • 同一子网: 摄像头和目标设备必须处于相同网络范围
  • 端口可访问: 目标设备端口不得被防火墙阻止
  • 网络连通性: 如可能,使用 ping 命令测试

1.3 网络要求

要求摄像头目标设备备注
IP 范围192.168.0.100192.168.0.xxx必须在同一子网
子网掩码255.255.255.0255.255.255.0标准配置
端口访问49155(示例)49155(示例)避免保留端口
防火墙允许 TCP 流量允许 TCP 流量双向允许

步骤 2:访问 Node-RED 编辑器

2.1 进入 IO Block

  1. 点击配方面包屑菜单中的“IO Block”,或
  2. 在配方编辑器中选择“Configure I/O”

2.2 打开 Node-RED 编辑器

  1. 点击 Configure IO 进入 Node-RED 流程编辑器
  2. 确认 Node-RED 界面正常加载

检查点: 应显示左侧节点面板的 Node-RED 流程编辑器。

步骤 3:配置 TCP 输入(接收数据)

3.1 添加 TCP 输入节点

  1. 在左侧面板(网络部分)找到 "tcp in" 节点
  2. 将 "tcp in" 节点拖拽到流程画布
  3. 双击节点进行配置

3.2 配置 TCP 输入设置

节点配置:

设置数值说明
类型Listen on摄像头作为服务器
端口49155摄像头监听端口
数据模式Stream持续数据流
数据类型UTF8基于文本的通信
主题(可选)消息分类

3.3 TCP 输入配置步骤

  1. 服务器配置:
    • 选择 “Listen on port”(服务器模式)
    • 输入 端口号(例如 49155)
  2. 数据处理:
    • 数据模式: 选择 “Stream” 以实现连续数据
    • 数据类型: 选择 “UTF8”(文本)或 “Buffer”(二进制)
  3. 高级设置:
    • 换行符: 留空,除非需要特定分隔符
    • 主题: 可选的消息路由标识
  4. 点击 Done 保存配置

3.4 端口选择指南

端口范围用途建议
1-1023系统保留端口避免使用
1024-49151注册端口检查可用性
49152-65535动态/私有端口推荐使用

步骤 4:配置 TCP 输出(发送数据)

4.1 添加 TCP 输出节点

  1. 在左侧面板(网络部分)找到 "tcp out" 节点
  2. 将 "tcp out" 节点拖拽到流程画布
  3. 双击节点进行配置

image.png

4.2 配置 TCP 输出设置

节点配置:

设置数值说明
类型Connect to摄像头作为客户端
主机192.168.0.200目标设备 IP 地址
端口49155目标设备端口
模式Client出站连接

4.3 TCP 输出配置步骤

  1. 连接设置:
    • 类型: 选择 “Connect to”(客户端模式)
    • 主机: 输入 目标设备 IP 地址
    • 端口: 输入 目标设备端口号
  2. 连接选项:
    • 模式: 保持为 “Client”
    • 结束连接: 根据使用场景配置
  3. 数据格式:
    • Base64: 通常文本数据禁用
    • TLS: 仅在需要安全连接时启用
  4. 点击 Done 保存配置

步骤 5:创建通信流程

5.1 构建完整流程

创建一个既能发送又能接收 TCP 数据的流程:

  1. 将以下节点添加到画布:
    • Inject 节点(触发消息)
    • Function 节点(消息处理)
    • TCP Out 节点(发送数据)
    • TCP In 节点(接收数据)
    • Debug 节点(监控)

5.2 配置 Inject 节点

  1. 双击 Inject 节点
  2. 配置设置:
    • 名称: "Send Message"
    • 负载: 时间戳
    • 主题: (留空)
  3. 点击 Done

5.3 配置 Function 节点

Function 节点用于格式化发送的消息:

msg.payload = "Hello from OV20i camera";
return msg;

  1. 双击 Function 节点
  2. 将上述代码复制到“On Message”标签页
  3. 名称: "Format Message"
  4. 点击 Done

5.4 连接节点

按以下顺序连接节点:

发送流程:

  • Inject → Function → TCP Out
  • Function → Debug(查看发送消息)

接收流程:

  • TCP In → Debug(查看接收消息)

5.5 完整流程结构

最终流程应包含:

  • Inject 连接到 Function
  • Function 同时连接到 TCP OutDebug
  • TCP In 连接到独立的 Debug 节点

结果: 点击 Inject 按钮即可发送消息,调试面板显示发送和接收的消息。

步骤 6:配置消息格式

6.1 定义消息格式

保持消息结构简单:

消息类型格式示例
简单文本纯字符串"Hello from camera"
状态更新带信息的文本"STATUS: READY"
数据值键值格式"TEMPERATURE: 25.5"

6.2 自定义消息示例

可根据不同消息类型修改 Function 节点:

简单状态消息:

msg.payload = "Camera Ready";
return msg;

时间戳消息:

msg.payload = "Time: " + new Date().toLocaleString();
return msg;

带数据的消息:

msg.payload = "INSPECTION_COUNT: 42";
return msg;

步骤 7:部署并测试配置

7.1 部署 Node-RED 流程

  1. 点击右上角的 Deploy 按钮
  2. 确认部署成功消息
  3. 检查节点状态指示器:
    • 绿色点: 连接成功
    • 红色点: 连接错误
    • 黄色点: 正在尝试连接

7.2 测试 TCP 通信

7.2.1 基本连通性测试

使用命令行工具:

# 测试 TCP 连接(Linux/Mac)
telnet [camera-ip] [port]
# 示例:telnet 192.168.0.100 49155

# 使用 netcat 测试
nc [camera-ip] [port]
# 示例:nc 192.168.0.100 49155

Windows PowerShell:

Test-NetConnection -ComputerName 192.168.0.100 -Port 49155

7.2.2 发送测试消息

  1. 连接到摄像头 TCP 端口
  2. 发送测试命令:
    • "STATUS" → 应收到状态响应
    • "TRIGGER" → 应触发检测
    • "INVALID" → 应妥善处理未知命令

7.2.3 监控调试输出

  1. 打开 Node-RED 调试面板(右侧边栏)
  2. 通过 TCP 发送测试消息
  3. 确认调试输出显示:
    • 接收的消息
    • 处理结果
    • 发送的响应

7.3 验证检查表

测试预期结果状态
TCP 连接成功连接摄像头端口
消息接收调试显示接收消息
消息处理Function 节点正确处理
响应发送目标设备接收响应
错误处理无效消息被妥善处理

步骤 8:与检测系统集成

8.1 连接检测触发器

将 TCP 通信与检测工作流关联:

  1. 添加“All Block Outputs”节点(如尚未添加)
  2. 将检测结果连接到 TCP 输出
  3. 格式化检测数据以便 TCP 传输

8.2 检测数据集成

Function 节点处理检测结果:

// 获取 All Block Outputs 的检测结果
const results = msg.payload;

// 提取关键信息
const inspectionSummary = {
result: results.pass ? "PASS" : "FAIL",
timestamp: new Date().toISOString(),
processing_time: results.processing_time,
roi_count: results.roi_results ? results.roi_results.length : 0
};

// 格式化为 TCP 传输格式
msg.payload = JSON.stringify(inspectionSummary);
return msg;

8.3 双向控制

通过 TCP 实现远程控制:

// 处理远程命令
const command = msg.payload.toString().toUpperCase();

switch(command) {
case "START_INSPECTION":
// 触发检测序列
global.set("trigger_inspection", true);
msg.payload = "INSPECTION_STARTED";
break;

case "STOP_INSPECTION":
// 停止检测序列
global.set("trigger_inspection", false);
msg.payload = "INSPECTION_STOPPED";
break;

case "CHANGE_RECIPE":
// 配方更改逻辑
msg.payload = "RECIPE_CHANGED";
break;
}

return msg;

步骤 9:常见问题排查

9.1 连接问题

问题症状解决方案
无法连接红色状态指示检查 IP 地址和端口
连接断开间歇性黄色状态验证网络稳定性
超时错误响应延迟调整超时设置
端口冲突连接被拒绝使用不同端口号

9.2 数据传输问题

问题症状解决方案
无数据接收调试显示空消息检查数据格式设置
数据损坏调试乱码验证编码(UTF8/Buffer)
消息丢失消息缺失检查网络稳定性
大消息问题数据被截断使用更短消息

9.3 调试技巧

系统化排查:

  1. 在每个步骤启用调试节点
  2. 监控 Node-RED 日志中的错误
  3. 先用简单 TCP 客户端测试
  4. 使用 ping 验证网络连通性

成功!您的 TCP 通信已准备就绪

您的 TCP 通信系统现可:

  • 在摄像头与外部设备间发送和接收数据
  • 处理简单消息,实现基本通信
  • 通过调试节点监控数据流
  • 为您的应用处理基础网络通信

持续维护

定期系统检查

  • 监控连接稳定性
  • 验证数据传输一致性
  • 检查调试日志中的错误模式
  • 网络变更后测试通信

后续步骤

完成基础 TCP 通信设置后:

  1. 使用已建立连接测试外部系统
  2. 根据需求定制消息格式
  3. 随着需求增长添加更复杂逻辑
  4. 如 TCP 不满足需求,考虑其他通信方式

🔗 参见

针对高吞吐量应用:

  1. 降低消息频率
  2. 批量发送多条消息
  3. 对大数据使用二进制格式
  4. 实现压缩

调试技巧

系统化排查:

  1. 在每个步骤启用调试节点
  2. 监控 Node-RED 日志中的错误
  3. 使用网络监控工具(Wireshark)
  4. 先用简单 TCP 客户端测试

成功!您的 TCP 通信已准备就绪

您的 TCP 通信系统现可:

  • 在摄像头与外部设备间发送和接收数据
  • 处理远程控制命令
  • 实时传输检测结果
  • 通过适当错误处理优雅地处理异常
  • 与生产系统集成,实现自动化工作流

持续维护

定期系统检查

  • 监控连接稳定性
  • 验证生产环境中的数据完整性
  • 根据需要更新安全配置
  • 基于使用模式优化性能

性能监控

  • 跟踪消息吞吐量和延迟
  • 监控错误率和连接失败
  • 分析数据模式以优化系统

后续步骤

完成 TCP 通信设置后:

  1. 使用已建立协议与外部系统集成
  2. 实现全面的错误处理以适应生产环境
  3. 设置日志记录和监控以保障系统健康
  4. 考虑生产部署的安全增强措施

🔗 参见